// 定义包名，表明该类属于服务层的包
package com.zhunaer.service;

// 导入 ShopDao 接口，用于与数据库交互操作商铺数据
import com.zhunaer.dao.ShopDao;
// 导入 ShopDao 接口的实现类，用于具体的数据库操作
import com.zhunaer.dao.impl.ShopDaoImpl;
// 导入 Shop 实体类，用于表示商铺的业务数据
import com.zhunaer.entity.Shop;
// 导入 List 接口，用于处理多个商铺对象的集合
import java.util.List;

/**
 * ShopService 接口定义了一系列与商铺业务相关的服务方法。
 * 这些方法涵盖了商铺的申请、信息更新、查询等操作，
 * 为上层调用者提供了与商铺业务交互的抽象接口。
 */
public interface ShopService {

    /**
     * 申请开设一家新商铺。
     *
     * @param shop 包含新商铺信息的 Shop 对象
     * @return 如果申请成功返回 true，否则返回 false
     */
    boolean applyShop(Shop shop);

    /**
     * 更新商铺的信息。
     *
     * @param shop 包含要更新信息的 Shop 对象
     * @return 如果更新成功返回 true，否则返回 false
     */
    boolean updateShopInfo(Shop shop);

    /**
     * 根据用户 ID 获取该用户拥有的所有商铺列表。
     *
     * @param userId 用户的唯一标识符
     * @return 包含该用户所有商铺的列表，如果没有则返回空列表
     */
    List<Shop> getShopByUserId(Integer userId);

    /**
     * 获取系统中所有的商铺列表。
     *
     * @return 包含所有商铺的列表，如果没有则返回空列表
     */
    List<Shop> getAllShops();

    /**
     * 根据商铺 ID 获取指定的商铺信息。
     *
     * @param shopId 商铺的唯一标识符
     * @return 对应的 Shop 对象，如果未找到则返回 null
     */
    Shop getShopById(Integer shopId);

    /**
     * 对商铺进行审核操作。
     *
     * @param shopId      要审核的商铺的唯一标识符
     * @param auditStatus 审核状态，可能的值如审核通过、审核不通过等
     * @return 如果审核操作成功返回 true，否则返回 false
     */
    boolean auditShop(Integer shopId, Integer auditStatus);

    /**
     * 根据关键词和状态条件查找符合条件的商铺列表。
     *
     * @param keyword 用于搜索的关键词，如商铺名称、关键词等
     * @param status  商铺的状态，如营业状态、审核状态等
     * @return 包含符合条件商铺的列表，如果没有则返回空列表
     */
    List<Shop> findShopsByCondition(String keyword, String status);
}